package com.chen.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet(value = "/t6")
public class TestHttpServletRequst02 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求参数 key-value 这种形式的参数 url后面或者请求体中都可以获取到

        // 根据指定的参数名获取指定的值
        String username = req.getParameter("username");
        System.out.println(username);


        // 获取一个请求参数名称对多个请求参数值的方法
        String[] exercises = req.getParameterValues("exercise");
        System.out.println(Arrays.toString(exercises));

        // 获取所有的参数值
        // 获取所有请求参数名字
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String key = parameterNames.nextElement();
            String[] values = req.getParameterValues(key);
            if (values.length > 1) {
                // 一个参数名对应多个参数值
                System.out.println(key + "=" + Arrays.toString(values));
            } else {
                // 一个参数名对应一个参数值
                System.out.println(key + "=" + values[0]);
            }
        }

        // 获取所有请求参数的组合的map集合
        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
        for (Map.Entry<String, String[]> next : entries) {
            String key = next.getKey();
            String[] values = next.getValue();
            if (values.length > 1) {
                // 一个参数名对应多个参数值
                System.out.println(key + "=" + Arrays.toString(values));
            } else {
                // 一个参数名对应一个参数值
                System.out.println(key + "=" + values[0]);
            }
        }
        // getContentLengthLong() 获取请求体的字节长度
        System.out.println(req.getContentLengthLong());
        // 获取@WebServlet中value值 （当前servlet的访问路径）
        System.out.println(req.getServletPath());

    }
}
